home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tricks of the Mac Game Programming Gurus
/
TricksOfTheMacGameProgrammingGurus.iso
/
Book Chapters
/
Appendix A - Top Speed
/
MoveData
/
MoveData.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-03-12
|
3KB
|
120 lines
#include <stdio.h>
#define kLoopNumber 100
/* Standard inits */
static void InitToolbox(void) {
InitGraf (&qd.thePort);
InitFonts ();
FlushEvents (everyEvent,0);
InitWindows ();
InitMenus ();
TEInit ();
InitDialogs (nil);
InitCursor ();
} /*InitToolbox*/
#define kBlockSize 100000L
void main(void)
{
long timeBefore,timeAfter;
long loop, memLoop, memLoopLimit;
Ptr sourcePtr, destinationPtr;
char *charSourcePtr, *charDestPtr;
short *shortSourcePtr, *shortDestPtr;
long *longSourcePtr, *longDestPtr;
InitToolbox();
sourcePtr = NewPtr(kBlockSize);
destinationPtr = NewPtr(kBlockSize);
if (sourcePtr == nil || destinationPtr == nil)
{
printf("Couldn't allocate memory.");
}
else
{
memLoopLimit = kBlockSize / sizeof(char) / 16;
timeBefore = TickCount();
for (loop = 0; loop < kLoopNumber; loop++)
{
charSourcePtr = sourcePtr;
charDestPtr = destinationPtr;
for (memLoop = 0; memLoop < memLoopLimit; memLoop++)
{
*charDestPtr++ = *charSourcePtr++;
*charDestPtr++ = *charSourcePtr++;
*charDestPtr++ = *charSourcePtr++;
*charDestPtr++ = *charSourcePtr++;
*charDestPtr++ = *charSourcePtr++;
*charDestPtr++ = *charSourcePtr++;
*charDestPtr++ = *charSourcePtr++;
*charDestPtr++ = *charSourcePtr++;
*charDestPtr++ = *charSourcePtr++;
*charDestPtr++ = *charSourcePtr++;
*charDestPtr++ = *charSourcePtr++;
*charDestPtr++ = *charSourcePtr++;
*charDestPtr++ = *charSourcePtr++;
*charDestPtr++ = *charSourcePtr++;
*charDestPtr++ = *charSourcePtr++;
*charDestPtr++ = *charSourcePtr++;
}
}
timeAfter = TickCount();
printf("Chars: %ld ticks for %ld copies.\n", timeAfter-timeBefore, (long)kLoopNumber);
memLoopLimit = kBlockSize / sizeof(short) / 8;
timeBefore = TickCount();
for (loop = 0; loop < kLoopNumber; loop++)
{
shortSourcePtr = (short *) sourcePtr;
shortDestPtr = (short *) destinationPtr;
for (memLoop = 0; memLoop < memLoopLimit; memLoop++)
{
*shortDestPtr++ = *shortSourcePtr++;
*shortDestPtr++ = *shortSourcePtr++;
*shortDestPtr++ = *shortSourcePtr++;
*shortDestPtr++ = *shortSourcePtr++;
*shortDestPtr++ = *shortSourcePtr++;
*shortDestPtr++ = *shortSourcePtr++;
*shortDestPtr++ = *shortSourcePtr++;
*shortDestPtr++ = *shortSourcePtr++;
}
}
timeAfter = TickCount();
printf("Shorts: %ld ticks for %ld copies.\n", timeAfter-timeBefore, (long)kLoopNumber);
memLoopLimit = kBlockSize / sizeof(long) / 4;
timeBefore = TickCount();
for (loop = 0; loop < kLoopNumber; loop++)
{
longSourcePtr = (long *) sourcePtr;
longDestPtr = (long *) destinationPtr;
for (memLoop = 0; memLoop < memLoopLimit; memLoop++)
{
*longDestPtr++ = *longSourcePtr++;
*longDestPtr++ = *longSourcePtr++;
*longDestPtr++ = *longSourcePtr++;
*longDestPtr++ = *longSourcePtr++;
}
}
timeAfter = TickCount();
printf("Longs: %ld ticks for %ld copies.\n", timeAfter-timeBefore, (long)kLoopNumber);
timeBefore = TickCount();
for (loop = 0; loop < kLoopNumber; loop++)
BlockMove(sourcePtr, destinationPtr, kBlockSize);
timeAfter = TickCount();
printf("BlockMove: %ld ticks for %ld copies.\n", timeAfter-timeBefore, (long)kLoopNumber);
}
} /*main*/